<script>
  const arr =  [
            { 'id': '29', 'pid': '',     'name': '总裁办' },
            { 'id': '2c', 'pid': '',     'name': '财务部' },
            { 'id': '2d', 'pid': '2c', 'name': '财务核算部'},
            { 'id': '2f', 'pid': '2c', 'name': '薪资管理部'},
            { 'id': 'd2', 'pid': '',     'name': '技术部'},
            { 'id': 'd3', 'pid': 'd2', 'name': 'Java研发部'},
            { 'id': '2g', 'pid': 'd2', 'name': 'Python研发部'},
            ]
  const mapObj = {} // 映射对象
  arr.forEach(item => {
    console.log(item,'item');
    if(!item.children) {
      item.children = []
    }
    // 往映射对象添加剂数据 取出去每一个item对象的id作为映射对象的key 属性就是当前的item
    mapObj[item.id] = item
  })
  console.log(mapObj,'mapObj');

  // 3.具体实现树形数据的转化
  const newArr = []
  arr.forEach(item => {
    const parent = mapObj[item.pid]
    // 如果parent是 undefind ，就说明item没有父级是一级数据
    // 如果parent 有数据 就说明item是一个二级数据或者三级数 parent 保存的是父级的对象
  if(parent) {
    parent.children.push(item)
  } else {
    newArr.push(item)
  }
  })
  console.log(newArr,'newArrr');
</script>